1 using UnityEngine;
2
3 namespace
ProceduralToolkit
4 {

5     ///
<summary>
6     ///
Vector extensions
7     ///
</summary>
8     
public static class VectorE
9     {
10         
private const float epsilon = 0.00001f;
11
12         
#region Vector2
13
14         ///
<summary>
15         ///
Returns new vector with zero Y component
16         ///
</summary>
17         
public static Vector2 OnlyX(this Vector2 vector)
18         {
19             
return new Vector2(vector.x, 0);
20         }

21
22         ///
<summary>
23         ///
Returns new vector with zero X component
24         ///
</summary>
25         
public static Vector2 OnlyY(this Vector2 vector)
26         {
27             
return new Vector2(0, vector.y);
28         }

29
30         ///
<summary>
31         ///
Projects vector onto three dimensional XY plane
32         ///
</summary>
33         
public static Vector3 ToVector3XY(this Vector2 vector)
34         {
35             
return new Vector3(vector.x, vector.y, 0);
36         }

37
38         ///
<summary>
39         ///
Projects vector onto three dimensional XZ plane
40         ///
</summary>
41         
public static Vector3 ToVector3XZ(this Vector2 vector)
42         {
43             
return new Vector3(vector.x, 0, vector.y);
44         }

45
46         ///
<summary>
47         ///
Projects vector onto three dimensional YZ plane
48         ///
</summary>
49         
public static Vector3 ToVector3YZ(this Vector2 vector)
50         {
51             
return new Vector3(0, vector.x, vector.y);
52         }

53
54         ///
<summary>
55         ///
Returns true if vectors lie on the same line, false otherwise
56         ///
</summary>
57         
public static bool IsCollinear(this Vector2 vector, Vector2 other)
58         {
59             
return Mathf.Abs(PTUtils.PerpDot(vector, other)) < epsilon;
60         }

61
62         ///
<summary>
63         ///
Returns new vector rotated clockwise by specified angle
64         ///
</summary>
65         
public static Vector2 RotateCW(this Vector2 vector, float degrees)
66         {
67             
float radians = degrees*Mathf.Deg2Rad;
68             
float sin = Mathf.Sin(radians);
69             
float cos = Mathf.Cos(radians);
70             
return new Vector2(
71                 vector.x*cos + vector.y*sin,
72                 -vector.x*sin + vector.y*cos);
73         }
74
75         
#endregion Vector2
76
77         
#region Vector3
78
79         ///
<summary>
80         ///
Returns new vector with zero Y and Z components
81         ///
</summary>
82         
public static Vector3 OnlyX(this Vector3 vector)
83         {
84             
return new Vector3(vector.x, 0, 0);
85         }

86
87         ///
<summary>
88         ///
Returns new vector with zero X and Z components
89         ///
</summary>
90         
public static Vector3 OnlyY(this Vector3 vector)
91         {
92             
return new Vector3(0, vector.y, 0);
93         }

94
95         ///
<summary>
96         ///
Returns new vector with zero X and Y components
97         ///
</summary>
98         
public static Vector3 OnlyZ(this Vector3 vector)
99         {
100             
return new Vector3(0, 0, vector.z);
101         }

102
103         ///
<summary>
104         ///
Returns new vector with zero Z component
105         ///
</summary>
106         
public static Vector3 OnlyXY(this Vector3 vector)
107         {
108             
return new Vector3(vector.x, vector.y, 0);
109         }

110
111         ///
<summary>
112         ///
Returns new vector with zero Y component
113         ///
</summary>
114         
public static Vector3 OnlyXZ(this Vector3 vector)
115         {
116             
return new Vector3(vector.x, 0, vector.z);
117         }

118
119         ///
<summary>
120         ///
Returns new vector with zero X component
121         ///
</summary>
122         
public static Vector3 OnlyYZ(this Vector3 vector)
123         {
124             
return new Vector3(0, vector.y, vector.z);
125         }
126
127         
#endregion Vector3
128     }
129 }


Gõ tìm kiếm nhanh...